package org.seckill.service;

import org.seckill.dto.Exposer;
import org.seckill.dto.SeckillExecution;
import org.seckill.entity.Seckill;
import org.seckill.exception.RepeatKillException;
import org.seckill.exception.SeckillCloseException;
import org.seckill.exception.SeckillException;

import java.util.List;

/**
 * 业务接口：站在“使用者”角度设计接口
 * 三个方面：方法定义粒度，参数，返回类型（return类型 / 异常）
 */
public interface SeckillService {

    /**
     * 查询所有秒杀记录
     *
     */

    List<Seckill> getSeckillList();

    Seckill getById(long seckillId);
    /*
    *       秒杀开始时：输出秒杀接口地址,否则输出 系统时间 和 秒杀时间
    * */
   Exposer exportSeckillId(long seckillId);


    /*
    *   执行秒杀操作
    * */
    SeckillExecution executeSeckill(long seckillId, long userPhone, String md5)
        throws SeckillException,RepeatKillException,SeckillCloseException;


    /*
        执行秒杀操作 by 存储过程
     */
    SeckillExecution executeSeckillProcedure(long seckillId, long userPhone, String md5)
            throws SeckillException,RepeatKillException,SeckillCloseException;
}
